home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1999 March / EnigmA AMIGA RUN 35 (1999)(G.R. Edizioni)(IT)[!][issue 1999-03].iso / earcd / devel / vbcc-src / doc / vbcc.doc < prev    next >
Text File  |  1999-01-01  |  26KB  |  660 lines

  1. vbcc - C compiler (c) in 1995-99 by Volker Barthelmann
  2. vbpp - C preprocessor (c) in 1995-96 by Thorsten Schaaps
  3.  
  4.  
  5. INTRODUCTION
  6.  
  7.     vbcc is a free portable and retargetable ANSI C compiler.
  8.     It is split into a target-independant and a target-dependant part, and
  9.     supports emulating datatypes of the target machine on any other machine
  10.     so that it is possible to e.g. make a crosscompiler for a 64bit machine
  11.     on a 32bit machine.
  12.  
  13.     The target-independant part generates a form of intermediate code
  14.     (quads) which has to be dealt with by the code generator. This
  15.     intermediate code is rather cpu independant (apart from register usage)
  16.     but the target-independant part of vbcc uses informations about the
  17.     target machine while generating this code.
  18.  
  19.     If you are interested in writing a code generator for vbcc, contact
  20.     me (the necessary documents are not written yet).
  21.  
  22.     This document only deals with the target-independant parts of vbcc.
  23.     Be sure to read all the documents for your machine.
  24.  
  25.  
  26. LEGAL
  27.  
  28.     vbcc is (c) in 1995-99 by Volker Barthelmann. The builtin preprocessor
  29.     (consisting of the files preproc.c and vbpp.h) is written and (c) by
  30.     Thorsten Schaaps. All other code is (c) by Volker Barthelmann.
  31.     vbcc may be freely redistributed as long as no modifications are made
  32.     and nothing is charged for it.
  33.     Non-commercial usage of vbcc is allowed without any restrictions.
  34.     Commercial usage needs my written consent.
  35.  
  36.     Sending me money, gifts, postcards etc. would be very nice and may
  37.     encourage further development of vbcc, but is not legally or morally
  38.     necessary to use vbcc.
  39.  
  40.  
  41. INSTALLATION
  42.  
  43.     The installation is system dependant and covered in another manual.
  44.  
  45.  
  46. USAGE
  47.  
  48.     Usually vbcc will be called by a frontend. However, if you call it
  49.     directly it has to be done like this (and most of the options
  50.     should be passed through to vbcc by the frontend):
  51.  
  52.       vbcc [options] file
  53.  
  54.     The following options are supported by the machine independant part
  55.     of vbcc:
  56.  
  57.     -quiet      Do not print the copyright notice.
  58.  
  59.     -ic1        Write the intermediate code before optimizing to file.ic1.
  60.  
  61.     -ic2        Write the intermediate code after optimizing to file.ic2.
  62.  
  63.     -debug=n    Set the debug level to n.
  64.  
  65.     -o=ofile    Write the generated assembler output to <ofile> rather than
  66.                 the default file.
  67.  
  68.     -noasm      Do not generate assembler output (only for testing).
  69.  
  70.     -O=n        Turns optimizing options on/off; every bit set in n turns
  71.                 on an option.
  72.                 (See section on optimizing.)
  73.  
  74.     -maxoptpasses=n
  75.                 Set maximum number of optimizer passes to n.
  76.                 (See section on optimizing.)
  77.  
  78.     -inline-size=n
  79.                 Set the maximum 'size' of functions to be inlined.
  80.                 (See section on optimizing.)
  81.  
  82.     -unroll-size=n
  83.                 Set the maximum 'size' of unrolled loops.
  84.                 (See section on optimizing.)
  85.  
  86.     -fp-associative
  87.                 Floating point operations do not obey the law of
  88.                 associativity, e.g. (a+b)+c==a+(b+c) is not true for all
  89.                 floating point numbers a,b,c. Therefore certain optimizations
  90.                 depending on this property cannot be performed on floating
  91.                 point numbers.
  92.                 With this option you can tell vbcc to treat floating point
  93.                 operations as associative and perform those optimizations
  94.                 even if that may change the results in some cases (not
  95.                 ANSI conforming).
  96.  
  97.     -no-alias-opt
  98.                 If the optimizer is turned on, vbcc has to make assumptions
  99.                 on aliasing (i.e. which pointer can point to which
  100.                 objects at a given time). If this option is specified,
  101.                 vbcc will make worst-case assumptions and some
  102.                 non-conforming programs could be made to work that way.
  103.  
  104.     -no-multiple-ccs
  105.                 If the code generator supports multiple condition code
  106.                 registers, vbcc will try to use them when optimizing.
  107.                 This flag prevents vbcc from using them.
  108.  
  109.     -iso
  110.     -ansi       Switch to ANSI/ISO mode.
  111.                 In ANSI mode warning 209 will be printed by default.
  112.                 '__reg' and inline-assembly-functions are not recognized.
  113.                 Also assignments between pointers to <type> and pointers
  114.                 to unsigned <type> will cause warnings.
  115.  
  116.     -maxerrors=n
  117.                 Abort the compilation after n errors; do not stop if n==0.
  118.  
  119.     -dontwarn=n
  120.                 Suppress warning number n; suppress all warnings if n<0.
  121.                 (See the section on errors/warnings.)
  122.  
  123.     -warn=n
  124.                 Turn on warning number n; turn on all warnings if n<0.
  125.                 (See the section on errors/warnings.)
  126.  
  127.     -strip-path
  128.                 Strip the path of filenames in error messages.
  129.                 Error messages may look more convenient to some people that
  130.                 way, but using this together with message browsers or
  131.                 similar programs could cause trouble.
  132.  
  133.     -nested-comments
  134.                 Allow nested comments (not ANSI conforming).
  135.                 Has no effect if the builtin preprocessor is disabled.
  136.  
  137.     -cpp-comments
  138.                 Allow C++ style comments (not ANSI conforming).
  139.                 Has no effect if the builtin preprocessor is disabled.
  140.  
  141.     -macro-redefinition
  142.                 Allow redefinition of macros (not ANSI conforming).
  143.                 Has no effect if the builtin preprocessor is disabled.
  144.  
  145.     -no-trigraphs
  146.                 Prevents expansion of trigraphs (not ANSI conforming).
  147.                 Has no effect if the builtin preprocessor is disabled.
  148.  
  149.     -no-preprocessor
  150.                 Do not invoke the builtin preprocessor vbpp.
  151.  
  152.     -E          Only preprocess the file and write the preprocessed
  153.                 source to <file>.i.
  154.  
  155.     -dontkeep-initialized-data
  156.                 By default vbcc keeps all data of initializations in memory
  157.                 during the whole compilation (it can sometimes make use
  158.                 of this when optimizing). This can take some amount of
  159.                 memory, though. If this option is specified, vbcc does not
  160.                 keep this data in memory and uses less memory.
  161.                 This has not yet been tested very well.
  162.  
  163.  
  164.     The assembler output will be saved to file.asm (if file already contained
  165.     a suffix, this will first be removed; same applies to .ic1/.ic2)
  166.  
  167.  
  168. SOME INTERNALS
  169.  
  170.     I try to make vbcc as ANSI compliant as possible, so I am only mentioning
  171.     some things I consider interesting.
  172.  
  173.  
  174. ERRORS/WARNINGS
  175.  
  176.     vbcc knows the following kinds of messages:
  177.  
  178.     fatal errors        Something is badly wrong and further compilation is
  179.                         impossible or pointless. vbcc will abort.
  180.                         E.g. no source file or really corrupt source.
  181.  
  182.     errors              There was an error and vbcc cannot generate useful
  183.                         code. Compilation continues, but no code will be
  184.                         generated.
  185.                         E.g. unknown identifiers.
  186.  
  187.     warnings (1)        Warnings with ANSI-violations. The program is not
  188.                         ANSI-conforming, but vbcc will generate code that
  189.                         could be what you want (or not).
  190.                         E.g. missing semicolon.
  191.  
  192.     warnings (2)        The code has no ANSI-violations, but contains some
  193.                         strange things you should perhaps look at.
  194.                         E.g. unused variables.
  195.  
  196.     Errors or the first kind of warnings are always displayed and cannot
  197.     be suppressed.
  198.  
  199.     Only some warnings of the second kind are turned on by default.
  200.     Many of them are very useful for some but annoying to others, and
  201.     their usability may depend on programming style. As I do not want
  202.     to force anyone to a certain style, I recommend everyone to find
  203.     their own preferences.
  204.  
  205.     A good way to do this is starting with all warnings turned on by
  206.     -warn=-1. So you will see all possible warnings. Now everytime you
  207.     get a warning you do not find useful, turn that one off with
  208.     -dontwarn=n.
  209.     The file errors.doc contains a list of all errors/warnings, sometimes
  210.     with more detailed descriptions. This might be very useful, too.
  211.  
  212.     See the docs on your frontend on how to configure it to your
  213.     preferences.
  214.  
  215.  
  216. DATA TYPES
  217.  
  218.     vbcc can handle the following atomic data types:
  219.  
  220.     signed/unsigned char/short/int/long  (signed is always default)
  221.     float/double  (long double is always the same as double)
  222.  
  223.     However several of them can be identical in certain implementations.
  224.  
  225.  
  226. OPTIMIZATIONS
  227.  
  228.     vbcc can compile with or without global optimizations.
  229.     But note that the optimizer is not yet finished and has not been
  230.     tested much. So only use it with care.
  231.  
  232.     In the first compilation phase every function is parsed into a tree
  233.     structure one expression after the other. Then type-checking and some
  234.     minor optimizations like constant-folding or some algebraic
  235.     simplifications are done on the trees.
  236.     This phase of the translation is identical in optimizing and
  237.     non-optimizing compilation.
  238.  
  239.     Then intermediate code is generated from the trees. In non-optimizing
  240.     compilation temporaries needed to evaluate the expression are
  241.     immediately assigned to registers, if possible. In optimizing
  242.     compilation, a new variable is generated for each temporary required.
  243.     Also for certain constructs like loops, different intermediate code
  244.     is produced in optimizing compilation.
  245.     Some minor optimizations are performed while generating the intermediate
  246.     code (simple elimination of unreachable code, some optimizations on
  247.     branches etc.).
  248.  
  249.     After intermediate code for the whole function has been generated
  250.     simple register allocation may be done in non-optimizing compilation
  251.     if bit 1 has been set in the -O option.
  252.     After that, the intermediate code is passed to the code generator and
  253.     then all memory for the function, its variables etc. is freed.
  254.  
  255.     In optimizing compilation flowgraphs are constructed, data flow analysis
  256.     is performed and many passes are made over the function's intermediate
  257.     code. Code may be moved around, new variables may be added, other
  258.     variables removed etc. etc. (for more detailed information on the
  259.     performed optimizations look at the description for the -O option
  260.     below).
  261.  
  262.     Many of the optimization routines depend on each other and if one
  263.     routine finds an optimization, this often enables other routines to
  264.     find further ones. Also some routines only do a first step and let
  265.     other routines 'clean up' afterwards. Because of this, vbcc usually
  266.     makes many passes until no further optimizations are found.
  267.     To avoid possible extremely long optimization times, the number of
  268.     those passes can be limited with the -maxoptpasses=n option (the
  269.     default value is max. 10 passes).
  270.  
  271.     Now it will be decided if the compiled function is a candidate for
  272.     inlining. In this case the intermediate code, as well as the data
  273.     structures for the local variables, will be copied and stored until
  274.     compilation of the entire translation-unit has finished.
  275.  
  276.     After those phases, register allocation should be done. As temporaries
  277.     have not been assigned to registers up to this point, register
  278.     allocation is crucial in optimizing compilation (note that some flags
  279.     MUST be turned on).
  280.  
  281.     Note that optimizing compilation can take MUCH more time and needs
  282.     MUCH more memory. It is hard to predict how much time and space it
  283.     needs, but usually it roughly depends on length of a function (time
  284.     and space needed will usually increase more than linear with the
  285.     length of a function).
  286.  
  287.  
  288.     At the moment the following bits in the -O option are recognized:
  289.  
  290.  
  291.     Bit 0 (1)           Register allocation
  292.  
  293.     This is the only flag that has any effect in non-optimizing compilation.
  294.  
  295.     In non-optimizing compilation, any registers that have never been used
  296.     for temporaries in this function are used for register variables in a
  297.     simple way.
  298.     For each variable, a priority to registerize it is computed (this has
  299.     already been done during generation of intermediate code). This value
  300.     usually reflects how much can be gained by putting it in a register.
  301.     Then, for every free register, the variable with the highest priority
  302.     that can be stored in that register is assigned that register for
  303.     the entire function.
  304.     This improves the generated code quite a bit.
  305.  
  306.     In optimizing compilation several passes are made:
  307.  
  308.     - First, all temporaries are assigned to registers in basic blocks.
  309.       Temporaries are recognized by utilising data flow information on
  310.       active variables, and one variable can be a temporary at one or
  311.       several points although it is alive over several basic blocks at
  312.       another point.
  313.  
  314.     - Then vbcc computes approximate savings that can be obtained by
  315.       holding a variable in a register within a certain program region
  316.       (usually a loop) and assigns the most used variables to registers
  317.       within this region.
  318.       Information on the function's loop structure and active variables
  319.       are used.
  320.  
  321.  
  322.     Bit 1 (2)           activate optimizing compilation
  323.  
  324.     This flag turns on the optimizer. If it is set to zero, no global
  325.     optimizations will be performed, no matter what the other flags are set
  326.     to.
  327.     When turned on, slightly different intermediate code will be generated
  328.     by the first translation phases.
  329.     Also the following optimizations are performed:
  330.  
  331.     - A flow graph is constructed and unused labels are deleted.
  332.  
  333.     - Unreachable code is eliminated.
  334.  
  335.     - Jump optimizations are performed.
  336.  
  337.     - Several peephole optimizations, like constant folding and algebraic
  338.       simplifications, are performed on the intermediate code.
  339.  
  340.     - Identical statements at the beginning/end of basic blocks are
  341.       moved to the successors/predecessors under certain conditions.
  342.  
  343.  
  344.     Bit 2 (4)           common subexpression elimination
  345.  
  346.     The intermediate code is scanned for common subexpressions that can be
  347.     eliminated. Also copy propagation is performed.
  348.     This can be done only within basic blocks or over the whole function,
  349.     depending on bit 5.
  350.     If global cse is selected, data flow analysis for available expressions
  351.     and available copies is performed.
  352.  
  353.     Note that the local versions of these optimizations are only restricted
  354.     versions of the global ones. They operate on the intermediate code
  355.     rather than on trees and therefore are slower than they could be
  356.     on compilers that only perform local versions.
  357.  
  358.  
  359.     Bit 3 (8)           constant propagation
  360.  
  361.     Variables which are known to have a constant value at one time are
  362.     replaced by constants.
  363.     This can be done only within basic blocks or over the whole function,
  364.     depending on bit 5.
  365.     If global constant propagation is selected, data flow analysis for
  366.     reaching definitions is performed.
  367.  
  368.     Note that the local versions of these optimizations are only restricted
  369.     versions of the global ones. They operate on the intermediate code
  370.     rather than on trees and therefore are slower than they could be
  371.     on compilers that only perform local versions.
  372.  
  373.  
  374.     Bit 4 (16)          elimination of dead code
  375.  
  376.     Code which computes a value that is never used will be eliminated.
  377.     Lots of dead code may be generated during the process of optimizing,
  378.     so this optimizations is crucial.
  379.  
  380.  
  381.     Bit 5 (32)          global optimization
  382.  
  383.     Some optimizations are available in local and global versions. This
  384.     flag turns on the global versions.
  385.     At the moment, this effects common subexpression elimination, copy
  386.     propagation, constant propagation and loop optimizations.
  387.  
  388.     Also, if this flag is not turned on, only one optimization pass is
  389.     done, whereas several are done if it is turned on.
  390.  
  391.     Not turning on this flag results in worse code and often shorter
  392.     compile time. However, there are cases where this increases compile
  393.     time.
  394.  
  395.  
  396.     Bit 6 (64)          reserved for future use
  397.  
  398.  
  399.     Bit 7 (128)         loop optimizations
  400.  
  401.     vbcc will try to identify loops and perform the following optimizations
  402.     on the loops it finds:
  403.  
  404.     - frequency-reduction: Loop-invariant operations will be moved out of
  405.                            the loop.
  406.  
  407.     - strength-reduction:  Linear functions of induction variables will be
  408.                            replaced by additional induction variables.
  409.  
  410.     These only work in conjunction with bit 5 (32).
  411.  
  412.  
  413.     Bit 8 (256)         merge variable space
  414.  
  415.     vbcc tries to place variables at the same memory addresses if possible.
  416.  
  417.  
  418.     Bit 9 (512)         reserved for future use
  419.  
  420.  
  421.     Bit 10 (1024)       move assignments out of loops
  422.  
  423.     If bits 5, 7 and 10 are set, vbcc will try to move loop-invariant
  424.     assignments out of loops.
  425.  
  426.  
  427.     Bit 11 (2048)       loop-unrolling
  428.  
  429.     vbcc tries to unroll certain loops. Only works together with bit 5 (32)
  430.     and bit 7 (128). At the moment a loop is only unrolled if the number
  431.     of iterations can be determined at compile time. In the future, loops
  432.     may also be unrolled if the number of iterations can be calculated at
  433.     loop entry.
  434.     With -unroll-size you can specify how many intermediate instructions
  435.     the unrolled loop should have at most.
  436.  
  437.  
  438.     Bit 12 (4096)       function inlining
  439.  
  440.     The intermediate code of functions that meet certain conditions
  441.     (mainly adjustable by -inline-size) is kept in memory for the entire
  442.     translation unit, and subsequent calls to this function are replaced
  443.     with this code.
  444.  
  445.     This way, constant arguments can be propagated across the function
  446.     and certain parts of the function may be omitted. Also common
  447.     subexpressions across the functions can be eliminated.
  448.  
  449.     An inlined function call is about the same as a macro expansion (but
  450.     safer).
  451.  
  452.     Also look at #pragma only-inline in the following section.
  453.  
  454.  
  455.  
  456.     Also look at the documentation for the target-dependant part of vbcc.
  457.     There may be additional machine specific optimization options.
  458.  
  459.  
  460. EXTENSIONS
  461.  
  462.     #pragma:
  463.  
  464.       At the moment vbcc accepts the following #pragma-directives:
  465.  
  466.       #pragma printflike <function>   This tells vbcc to handle <function>
  467.       #pragma scanflike <function>    specially.
  468.                                       <function> must be an already declared
  469.                                       function, with external linkage, that
  470.                                       takes a variable number of arguments
  471.                                       and a const char * as the last fixed
  472.                                       parameter.
  473.                                       If such a function is called with a
  474.                                       string-constant as format-string, vbcc
  475.                                       will check if the arguments seem to
  476.                                       match the format-specifiers in the
  477.                                       format-string, according to the rules
  478.                                       of printf or scanf.
  479.                                       Also, vbcc will replace the call by a
  480.                                       call to a simplified version according
  481.                                       to the following rules, if such a
  482.                                       function has been declared with external
  483.                                       linkage:
  484.  
  485.                                       If no format-specifiers are used at all,
  486.                                       __v0<function> will be called.
  487.  
  488.                                       If no qualifiers are used and only
  489.                                       d,i,x,X,o,s,c are used, __v1<function>
  490.                                       will be called.
  491.  
  492.                                       If no floating-point arguments are used,
  493.                                       __v2<function> will be called.
  494.  
  495.  
  496.       #pragma only-inline on          The following functions are prepared for
  497.                                       inlining, but no code is generated. This
  498.                                       can be used e.g. in header-files to
  499.                                       supply inline versions of certain
  500.                                       functions.
  501.                                       -inline-size is ignored in this mode -
  502.                                       every function gets prepared for
  503.                                       inlining.
  504.  
  505.                                       Do not use this with functions that have
  506.                                       local static variables!
  507.  
  508.       #pragma only-inline off         The following functions are translated
  509.                                       as usual again.
  510.  
  511.       #pragma opt <n>                 Sets the optimization options to <n>
  512.                                       (similar to -O=<n>) for the following
  513.                                       functions.
  514.                                       Never use this inside a function!
  515.  
  516.       #pragma type <expr>             Write the type of <expr> to stdout.
  517.                                       This is mainly intended for testing.
  518.  
  519.       #pragma tree <expr>             Write the parse-tree of <expr> to stdout.
  520.                                       This is mainly intended for testing.
  521.  
  522.  
  523.     Register parameters:
  524.  
  525.       If the parameters for certain functions should be passed in certain
  526.       registers, you can specify the registers with __reg("<reg>") in the
  527.       prototype, e.g.
  528.  
  529.         void f(__reg("d0") int x, __reg("a0") char *y) { ... }
  530.  
  531.       The names of the available registers depend on the code generator.
  532.       Note that a matching prototype must be in scope when calling such
  533.       a function - or wrong code will be generated.
  534.       Therefore it is not useful to use register parameters in an old-style
  535.       function-definition.
  536.  
  537.       If the code generator cannot handle the specified register for a
  538.       certain type, this will cause an error. Note that this may happen
  539.       although the register could store that type, if the code generator
  540.       does not know about it.
  541.  
  542.       Also note that this may force vbcc to create worse code.
  543.  
  544.       __reg is not recognized when ANSI/ISO mode is turned on.
  545.  
  546.  
  547.     Inline-assembly-functions:
  548.  
  549.       Only use them if you know what you are doing!
  550.  
  551.       A function-declaration may be followed by '=' and a string-constant.
  552.       If a function is called with such a declaration in scope, then no
  553.       function-call will be generated but the string-constant will be
  554.       inserted in the assembly-output.
  555.       Otherwise the compiler and optimizer will treat this like a
  556.       function-call, i.e. the inline-assembly must not modify any callee-save
  557.       registers without restoring them. (In the future there will be
  558.       possibilities to specify side-effects of function-calls to prevent the
  559.       compiler from having to use worst-case-assumptions.)
  560.  
  561.       Example:
  562.  
  563.         double sin(__reg("fp0") double) = "\tfsin.x\tfp0\n";
  564.  
  565.       Inline-assembly-functions are not recognized when ANSI/ISO mode is
  566.       turned on.
  567.  
  568.  
  569.     Target-specific variable attributes
  570.  
  571.       Some targets may offer additional options which are syntactically
  572.       similar to storage-class-specifiers. Multiple specification of an
  573.       attribute or redeclaration of a variable with a differing setting of
  574.       an attribute will cause a warning.
  575.  
  576.       However, no further checkings will be applied. E.g. if an attribute
  577.       is given to a variable it is not applicable to they will usually be
  578.       silently ignored.
  579.  
  580.       Further details may be found in the target-specific documentation.
  581.  
  582.       Target-specific variable attributes are not recognized when ANSI/ISO
  583.       mode is turned on.
  584.  
  585.  
  586.     __typeof:
  587.  
  588.       __typeof is syntactically equivalent to sizeof, but its result is of
  589.       type int and is a number representing the type of its argument.
  590.       This may be necessary for implementing stdarg.h.
  591.  
  592.  
  593. KNOWN PROBLEMS
  594.  
  595.     Some known target-independant problems of vbcc at the moment:
  596.  
  597.     - Some size limits are still hardcoded into the program (the maximum
  598.       nesting of blocks and the maximum length of input lines).
  599.  
  600.     - Bitfields are not really supported (they are always used as int).
  601.  
  602.     - 'volatile' is sometimes ignored.
  603.  
  604.     - long double is not really supported (see errors.doc).
  605.  
  606.     - The optimizer is not finished and may have a few bugs.
  607.  
  608.  
  609. CREDITS
  610.  
  611.     All those who wrote parts of the vbcc distribution, made suggestions,
  612.     answered my questions, tested vbcc, reported errors or were otherwise
  613.     involved in the development of vbcc (in descending alphabetical order,
  614.     under work, not complete):
  615.  
  616.     Frank Wille
  617.     Gary Watson
  618.     Johnny Tevessen
  619.     Ralph Schmidt
  620.     Markus Schmidinger
  621.     Thorsten Schaaps
  622.     Anton Rolls
  623.     Michaela Pruess
  624.     Joerg Plate
  625.     Gilles Pirio
  626.     Bartlomiej Pater
  627.     Gunther Nikl
  628.     Robert Claus Mueller
  629.     Joern Maass
  630.     Aki M Laukkanen
  631.     Kai Kohlmorgen
  632.     Uwe Klinger
  633.     Andreas Kleinert
  634.     Julian Kinraid
  635.     Acereda Macia Jorge
  636.     Dirk Holtwick
  637.     Kasper Graversen
  638.     Jens Granseuer
  639.     Volker Graf
  640.     Marcus Geelnard
  641.     Matthias Fleischer
  642.     Alexander Fichtner
  643.     Olivier Fabre
  644.     Robert Ennals
  645.     Thomas Dorn
  646.     Walter Doerwald
  647.     Aaron Digulla
  648.     Lars Dannenberg
  649.     Sam Crow
  650.     Michael Bode
  651.     Michael Bauer
  652.     Juergen Barthelmann
  653.     Thomas Arnhold
  654.     Alkinoos Alexandros Argiropoulos
  655.     Thomas Aglassinger
  656.  
  657.  
  658. Volker Barthelmann                                      volker@vb.franken.de
  659.  
  660.